(* 高阶函数 toBase 的定义 *)
fun toBase (b: int) : (int -> int list) =
    let
        (* 辅助函数，递归地计算基数转换 *)
        fun convert 0 = []
          | convert n =
              let
                  val remainder = n mod b         (* 计算当前位 *)
                  val quotient = n div b          (* 计算下一位 *)
              in
                  convert quotient @ [remainder]  (* 递归调用并将余数添加到结果中 *)
              end
    in
        convert
    end;

(* 将整数列表转换为字符串 *)
fun listToString [] = ""
  | listToString (x::xs) = Int.toString x ^ listToString xs;

(* 测试例子 *)
val base2 = toBase 2;     (* 创建一个以2为基数的转换函数 *)
val base5 = toBase 5;     (* 创建一个以5为基数的转换函数 *)

(* 测试不同的输入 *)
val result1 = base2 10;   (* 十进制数 10 转换为二进制 *)
val result2 = base5 25;    (* 十进制数 25 转换为五进制 *)
val result3 = base2 42;    (* 十进制数 42 转换为二进制 *)

(* 输出结果 *)
val _ = print ("Base 2 of 10: " ^ listToString result1 ^ "\n");
val _ = print ("Base 5 of 25: " ^ listToString result2 ^ "\n");
val _ = print ("Base 2 of 42: " ^ listToString result3 ^ "\n");